feat(cli): add users set-status command for NIP-38 profile status - #3253
Merged
Conversation
The desktop client renders a persistent user status (kind:30315, d:general) on profiles, but the CLI had no way to set it — only ephemeral presence. Integrations such as a now-playing music bridge need a scriptable way to update the status line. `buzz users set-status --text "..." [--emoji "🎶"]` signs and submits the replaceable status event via the HTTP bridge. Empty text clears the status. Signed-off-by: Kagan Yaldizkaya <[email protected]>
The command built its kind:30315 event inline with a raw EventBuilder and a duplicated 30315 literal, bypassing buzz-sdk as the typed write boundary and leaving the event shape untested. build_user_status() now owns the d:general coordinate, trimming, and emoji omission, keyed off buzz-core's KIND_USER_STATUS. An empty --text no longer implies clearing: it left an emoji-only status whenever --emoji was supplied, which contradicted the help text. Clearing is now the explicit --clear flag, mutually exclusive with --text/--emoji, and --text "" --emoji "..." is an intentional emoji-only status. Signed-off-by: Will Pfleger <[email protected]>
buzz users set-status for the NIP-38 profile status line
wpfleger96
approved these changes
Jul 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The desktop client renders a persistent user status (NIP-38 kind:30315,
d:general) as the status line on profiles, but the CLI had no way to set it — only ephemeral presence (set-presence, kind:20001). Integrations that want a scriptable, durable status line (for example a now-playing music bridge that shows the current TIDAL track on a profile) had no entry point.Screenshots
This adds:
d:generalcoordinate the desktop client already reads for the profile status line, and the sameemojitag shapeSetStatusDialogpublishes.buzz_sdk::build_user_status(), keyed offbuzz_core::kind::KIND_USER_STATUS, so the CLI command is a thin sign/submit wrapper. Text and emoji are trimmed; a blank emoji is omitted rather than emitted as an empty tag.--clearflag, mutually exclusive with--text/--emoji. It publishes an empty-content event carrying onlyd:general, which the desktop treats as no status.--text ""with an--emojiis an emoji-only status, not a clear.